package com.studyweb.mapper;

import com.studyweb.pojo.entity.FileUpload;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 文件上传Mapper接口
 * 
 * @author StudyWeb Team
 * @since 1.0.0
 */
@Mapper
public interface FileUploadMapper {
    
    /**
     * 插入文件上传记录
     * 
     * @param fileUpload 文件上传记录
     * @return 影响行数
     */
    int insert(FileUpload fileUpload);
    
    /**
     * 根据ID查询文件上传记录
     * 
     * @param fileId 文件ID
     * @return 文件上传记录
     */
    FileUpload selectById(@Param("fileId") Long fileId);
    
    /**
     * 根据用户ID查询文件上传记录列表
     * 
     * @param userId 用户ID
     * @return 文件上传记录列表
     */
    List<FileUpload> selectByUserId(@Param("userId") Long userId);
    
    /**
     * 查询所有文件上传记录
     * 
     * @return 文件上传记录列表
     */
    List<FileUpload> selectAll();
    
    /**
     * 更新文件上传记录
     * 
     * @param fileUpload 文件上传记录
     * @return 影响行数
     */
    int update(FileUpload fileUpload);
    
    /**
     * 根据ID删除文件上传记录
     * 
     * @param fileId 文件ID
     * @return 影响行数
     */
    int deleteById(@Param("fileId") Long fileId);
    
    /**
     * 根据文件路径查询文件上传记录
     * 
     * @param filePath 文件路径
     * @return 文件上传记录
     */
    FileUpload selectByFilePath(@Param("filePath") String filePath);
    
    /**
     * 根据条件查询文件上传记录
     * 
     * @param userId 用户ID（可选）
     * @param fileType 文件类型（可选）
     * @param status 状态（可选）
     * @param module 模块（可选）
     * @return 文件上传记录列表
     */
    List<FileUpload> selectByCondition(@Param("userId") Long userId, 
                                      @Param("fileType") String fileType, 
                                      @Param("status") Integer status,
                                      @Param("module") String module);
}